/* * Copyright 2007-2013 * Licensed under GNU Lesser General Public License * * This file is part of EpochX * * EpochX is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * EpochX is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with EpochX. If not, see <http://www.gnu.org/licenses/>. * * The latest version is available from: http://www.epochx.org */ package org.epochx.monitor.dialog; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.border.EmptyBorder; import org.epochx.monitor.Monitor; import org.epochx.monitor.MonitorUtilities; /** * A <code>DialogTextFilePrinter</code> extends a <code>Dialog</code> to add a * componnent in the Monitor. * * @see Dialog */ public class DialogComponentAdder extends Dialog { /** * Generated serial UID. */ private static final long serialVersionUID = 7473612490133574777L; /** * The row where the component must be added. */ private final int row; /** * The column where the component must be added. */ private final int col; /** * Constructs a <code>DialogComponentAdder</code>. * * @param monitor the owner <code>Monitor</code>. */ public DialogComponentAdder(Monitor monitor) { this(monitor, 0, 0); } /** * Constructs a <code>DialogComponentAdder</code>. * * @param monitor the owner <code>Monitor</code>. * @param r the row where the component must be added. * @param c the col where the component must be added. */ public DialogComponentAdder(Monitor monitor, int r, int c) { super(monitor, "Component Selection"); this.row = r; this.col = c; } @Override public void run() { // If no component in the list, display a message dialog. if (monitor.getComponents().length == 0) { JOptionPane.showMessageDialog(monitor, "No Components to add in the list."); return; } // Component Pane. JPanel componentPane = new JPanel(); JLabel componentLabel = new JLabel("Component :"); final JComboBox componantComboBox = new JComboBox(); synchronized (monitor) { for (JComponent componant: monitor.getComponents()) componantComboBox.addItem(componant); } componantComboBox.setPreferredSize(new Dimension(200, 20)); componentPane.add(componentLabel); componentPane.add(componantComboBox); // Row & Col selection Pane. JLabel rowLabel = new JLabel("Row :"); JLabel colLabel = new JLabel("Column :"); final JSpinner rowSpinner = new JSpinner(new SpinnerNumberModel(1, 1, monitor.getRowCount(), 1)); final JSpinner colSpinner = new JSpinner(new SpinnerNumberModel(1, 1, monitor.getColCount(), 1)); if (row == 0 && col == 0) { componentPane.add(rowLabel); componentPane.add(rowSpinner); componentPane.add(colLabel); componentPane.add(colSpinner); } else { rowSpinner.getModel().setValue(new Integer(row)); colSpinner.getModel().setValue(new Integer(col)); } // Button Pane. JPanel buttonPane = new JPanel(); JButton okButton = new JButton("OK"); getRootPane().setDefaultButton(okButton); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { monitor.add((JComponent) componantComboBox.getSelectedItem(), ((Integer)rowSpinner.getValue()).intValue(), ((Integer)colSpinner.getValue()).intValue()); setVisible(false); } }); buttonPane.add(okButton); JButton cancelButton = new JButton("Cancel"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); buttonPane.add(cancelButton); // Content Pane settings. JPanel contentPane = new JPanel(new BorderLayout()); final int BORDERWIDTH = 3; contentPane.setBorder(new EmptyBorder(BORDERWIDTH, BORDERWIDTH, BORDERWIDTH, BORDERWIDTH)); contentPane.add(componentPane, BorderLayout.NORTH); contentPane.add(buttonPane, BorderLayout.SOUTH); // JDialog settings. setModal(true); setResizable(false); setContentPane(contentPane); setPreferredSize(contentPane.getPreferredSize()); pack(); MonitorUtilities.centreRelativeToParent(this); setVisible(true); } }